package com.liang.bishi.wy;

import java.util.Scanner;

/**
 * 第四题：
 * 公司需要将所有同事分为3个组，且相邻工位的同事不能在同一组。
 * 给定工位分布为 row 排，每排 cnt 个工位，求不同的分组可能性，结果对 (10^9 + 7) 取余。
 * 1 1
 * <p>
 * 3
 */
public class Problem4 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int row = in.nextInt();
        int cut = in.nextInt();
        System.out.println(countGroupings(row, cut));
    }

    public static final int MOD = 1000000007;

    // 待验证
    private static long countGroupings(int row, int cnt) {
        int total = row * cnt;

        // dp[i] 表示前 i 个人的分组方式
        long[] dp = new long[total + 1];
        dp[0] = 1; // 0个人只有一种分法

        for (int i = 1; i <= total; i++) {
            // 每个人可以选择加入3个组中的任意一个
            dp[i] = dp[i - 1] * 3 % MOD;

            // 如果前一个人存在且相邻，则当前人不能和前一个人同组
            if (i > 1) {
                dp[i] = (dp[i] + dp[i - 2] * 2) % MOD; // 两种选择
            }
        }

        return dp[total];
    }

}
